/**
 * @file uva/11806/main.cpp
 * @author Ruiming Guo (guoruiming@stu.scu.edu.cn)
 * @brief
 * @version 0.1
 * @date 2022-04-29
 * 在一个 n×m 的矩阵中摆放 k 个石子，要求第一行、第一列、第 m 行、第
 * n 列必须有石子，求方案总数。T≤50,n≤20,m≤20,k≤500。
 *
 *
 * @copyright Copyright (c) 2022
 *
 *
 */

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 510, mod = 1e6 + 7;
int T, t, m, n, k, c[N][N], ans;
// 递推法计算组合数
void init() {
  c[0][0] = 1;
  for (int i = 1; i <= 500; ++i) {
    c[i][0] = 1;
    for (int j = 1; j <= i; ++j)
      c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
  }
}

signed main() {
  scanf("%lld", &T);
  init();
  while (T--) {
    scanf("%lld%lld%lld", &m, &n, &k);
    ans = 0;  // 要往下减多少种情况
    // 条件：第一行有石子、第一列有石子、第 m 行有石子、第 n 列有石子
    // 枚举状态，第 i 位为 1 表示 i 条件不被满足
    for (int S = 0; S < (1 << 4); ++S) {
      int x = m,                   // 可以放棋子的行数
          y = n,                   // 可以放棋子的列数
          cnt = 0;                 // 当前状态下有cnt个条件不被满足
      for (int i = 0; i < 4; i++)  // 枚举条件
        if ((S >> i) & 1) {        // 第i个条件未被满足
          if (i & 1)  //若是条件0或条件2，那么有一行不能放（即x--）
            x--;
          else  //若是条件1或条件3，那么有一列不能放（即y--）
            y--;
          cnt++;  // 未满足的条件数+1
        }
      if (!cnt) continue;  // 都满足了，不往下减
      if (cnt & 1)
        ans = (ans + c[x * y][k] % mod) % mod;
      else
        ans = (ans + mod - c[x * y][k] % mod) % mod;
    }
    // 总方案数减有任意一个条件不被满足的方案数
    printf("Case %lld: %lld\n", ++t, (c[n * m][k] % mod - ans + mod) % mod);
  }
}
